{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  XGBoost Parameter Tuning for Rentlist Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. 直接调用xgboost内嵌的cv寻找最佳的参数n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x138d6ec3cc0>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x138d6ea3ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "默认参数，此时学习率为0.1，比较大，观察弱分类数目的大致范围\n",
    "（采用默认参数配置，看看模型是过拟合还是欠拟合）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        nthread=-1,\n",
    "        n_jobs=4,\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x138d2886ac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')#blue\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')#yellow\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\Anaconda2\\envs\\python3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1oAAANGCAYAAADktv9+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XecXXWd//HXd3rJzCSTHpIQepcuRURAESvWVWEtWFZddlHUtaCuIIjltwrqCrIuCoqKXVzAQhEEQiCGjoROei/T+8z398c5c+fO5CaknGRmMq/n43Efmfu9537v99w75bzz/Z7PCTFGJEmSJEnZKRruAUiSJEnS7sagJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlacwIIfwohNAZQjiswGOfCyHEEMIbh7TXpo/dH0JoCCF0hxBWhxD+HEI4O4RQnrftnLSP/FtTCOGREML5IYTiXbGfWxJCODeEcM5wj2NHhBCqQggXhRBOKfDYOen7PmcYxjUjHdcRu/q1h1MI4doQQstwjwMgff9jCGHScI9FkgxaksaS84FVwI9DCKX9jWnw+jJwbYzxxrz2/YCHgC8A9wDvBU4DzgOWAz8Cvljgdf4bOCG9vQOYC1wO/L/sd2mbnQucM9yD2EFVwIXAKQUeu5nkfV+5KweUmkEyrjEVtCRJhZUM9wAkaVeJMTaFED4I3EISkC5MA9d1wGqSIAZACKEEuAGoB14aY1w4pLtfhRAuBo4s8FJLYoz35d3/cwjhUOAs4FOZ7ZA2EWNcC6wd7nFkKYRQFWNsG+5xSJK2jTNaksaUGONtwFXA50MIRwMXAYcDH4wxNuZt+hbgYODSAiGrv6/FMcYbtvKlG4Hu/IYQQlEI4TMhhCfTJY1rQgg/CSHMHPrkEMIH0iWIHSGEDSGE34cQDhqyzd4hhF+EEFak/a0OIdzev5QthLAIOAR4Rd7SxkVbGnS6zfdCCO8JISwMIbSl43jDVu53fl9lIYQv5u3v2hDCNSGEyUO2Oy2EcGcIYX0IoT2EsCSE8Nt0yeAcBoLUhXn7cW363E2WDqZ9PR5COCGEcG/a56IQwvvTx18fQngw3bfHQgivGTKefdNxPpNuszyEcGP+EtR0GePf07vX5I3rorxtzgwhzEv7aA4h3BpCOGHIa/UvfTsqhPCbEMJG4Ln0sS1+vpt5z89P+9u3wGPfCCF09S+zCyEcGUK4Kf0+7Exf5+ZC34/bI4RwUjre5vQ9uDeE8PrNbDcv/V5fHkK4JITwoaGf6w6O5dAQwh9CCBvT13k4hPC+IdsUpd+vT6XfMw0hhEdDCB/P22ZyCOEHIYSled/Tc0MIr8pinJJGN2e0JI1FnwbOAH4DzAKuijHeOmSb09N//287+i8KyYwYQB3wJuA1wDeGbPd94MPA94CbgDnAJcApIYSjYozrAEIIFwBfBa4HLgAmkgTEeSGEY2OMz6T9/REoBj4DLAEmAScC49PH35LucyPJEkKAzq3Yn9cDxwJfAlrS/n8fQjggxvj8VjyfEEIR8Afg5SRLKO8F9iRZsnlnCOGYGGN7eiB9M3A38AGgAdiD5P0rI1kS+Brgz8APgavTl3ixWaxpwDXpay8jWf75oxDCLODtJO9vY7qPN4QQ9o4xrkifOwNYD3wufZ164H3A/SGEI2OMTwEPAu9PX+Mr6T6QvhYhhLOBn5HMpp4FlKfv450hhFfGGO8ZMt7fAb8g+U+B6rTtxT7fQn5K8n13DnnLXENyvuC7gRtjjOtCCNXArcALwL+RzPBOA04FarbQ/1YJIbwi7f9R4IMk33fnAjeGEM6KMf4y3e4l6XZPk7zHbcBH07FmIoRwAMn33xrgYySf7buBa0MIU2OM/Ut8P0Pyc/YV4C6gFDiQwe/3dcBRJMuLn04fO4rkZ1TSWBdj9ObNm7cxdyM52I0kB+7jCjz+p/Tx8iHtgeQ/qfpvxXmPzUmfU+h2zZBtD0zbrxjS/0vT9kvT++NJDjZvHrLdLKAD+Fl6f2L6vI+/yH4/Dty5De9TJDmvrSavbSrQC3xuG/p5V9rXW4e0H5O2/2t6/23p/cO30NekdJuLCjx2TvrYnLy2O9O2o/Pa6oGe9L2dkdd+eLrteVt4/WKSg+6ngcsK7Ms5Q7YvIjmn71GgKK99HEmgmZvXdlHax5eH9LFVn+9mxvtbYOmQ135t2t8b0vtHp/fftB39Xwu0vMg289J9HZfXVgw8lo4tpG2/Ignzk4a8f/8Y+rlu5nX6379JW9jm+vRnZ9aQ9j8CrUBdev9G4KEXeb1m4PJtfc+8efM2Nm4uHZQ05qSzK+cBfcAUkoPrrfVxkiWA/bdHCmzzHZIZoGNJZgQ+T1IU4/q8bU5N/702/4kxxvnAQuCVadMJQGWB7ZYCf83bbgPJErNPhxA+mS4Dy+p3/B0xxua8115NMhuw5zb08QaS2akbQwgl/TfgYZIgd0q63cNAF/CDEML7Qgh7Z7EDwMoY4wP9d2KMG0j24eE4MHMFyXsPefuWjvXzIYQnQghdJAGtC9gPGLR8czMOIJkVuy7G2Jc3hhaSEHR8CKFqyHN+O+T+jny+1wAzgfzlbO8ned//lN5/FtgIfCOE8NEQwsFb2feLSmfLjgN+k+4zADHGXpIZoZkk7xHAK4C/xnQ2N92ujySAZeU04Pb0ZyjftSSFVvqXc84HDg8hXBlCOCOEUFugr/nAOekSw+NDXpEdSTJoSRqL/oPkYOps4BmSJWSVQ7ZZkv47NEz8nIEQ9eBm+l8WY1yQ3u6MMX6NZEngP4UQzki36V9aVKg63oq8x7dquxhjJAldfyFZ8vQgsDaE8N0Qwo4u/VpfoK2TJABurakks3NdDA6q3SRL1CYBxBifIwkEa4ArgOdCCM/lnxeznTYUaOsa2h5j7Eq/rMhrvozk87sBeCNJaDiWJGRvzXvwYp9hETBhSPugbXfw8/1T2l//OWkTgDOBn6Rhh5icn/gKkqD7VeAf6TlaX84gPEwgmQne3P7D4O/31QW2K9S2vSZu5Vi+RvK74niS93B9eo7ZMXnPeSfwY+BDJLN2G0JynuW0DMcraZQyaEkaU9L/qb+Y5CDzlyRLzfYFLh2yaf85W2fmN8YY1/SHKJJlQ1vr0fTf/tmz/vAyvcC2M4B127gdMSnO8cEY4zSSGYLLSc6D+a9tGOfOso5kX47dzK3/nDFijHfHGN9Icn7b8SQHsN8OIbxrVw869W6S75fPxxj/EmOcn37+W3utphf7DPtIZpPyxaEbbu/nmzdz9OYQwniS/2AoJ5npyt/usRjju0iCxhHAL0nOWdvRSpkbSfZxc/sPg7/fpxbYLsvgsn5rxhJj7IkxXhZjPIpkqelZJEt2/9I/AxljXBdjPD/GOIfkP2UuAN7KkBloSWOTQUvSmJEuVfsxyYHUxwFiUob9MuDjIYSX5W3+e+AJkuqEB2bw8v2V4dak//41/XfQSf4hhGNJlqPdnjbNA9oLbDeTdAlUoReLMT4dY/wKyTkwR+U9tK0zUVm5ieQAvjhvti//9tTQJ8QYe2OM95MUZ4CB/egv4LGr9iMypGhIWi1vjyHbbW5cT5Gco3V2CCHk9VFNck7avLiN5du38PluzjUks3RnkfznwrwY45Ob6TvGGB+JMX6CZLnn1vS/pbG2AvcDb82fOU6XPr6bpGDI02nz34DTQt4Fh9Pt/mlHxjDE7elrzBjS/l6Sc/buG/qEGGNDjPE3JLOs9STnYw7dZkmM8Xsk/0mzQ++ZpN2DVQcljSUXkBQseG2MsSGv/T9JloT9KIRwRIyxPcbYG0J4M8lSrfkhhP8lKaqwkWQJ3HEks1OFSr/PDiEcn35dTbJM8QJgMUk1OWKMT4UQfgCcF0LoI1maNIdkidpSktkKYowNIYRLgK+GEH5Ccp7XRJIL43aQVO3rr9b2PeDXJMshu0iC2EuAr+eN7THgXSGEdwLPAx0xxse25U3cTr8A/hn4YwjhOyTntnSTnJ9zKvCHGOPvQwgfTcd9M8nyzQqS6oMAtwHEGJtDCIuBN4UQbidZ/rcuxrhoJ439JpLzcJ4kmZk8mqRy5bIh2z1HEor/OYSwkKSow4oY44oQwmdIqg7eFEL4H5IZpU+TfC997sUGsA2fb0ExxidDCPNIvg9nkVS7zO//DSSzYzeQfF8EkpmZ8QzM7m5JcQjh7QXaW2OMf0pf91bgjhDCN9PxnwscCpyVLo2EZGb5jcDtIYRLSd7PjzJQebGPrfPGEMImM85pWPoyyTmDd4TkWngbSL43Xw98Jl1GSQjhRpLiMQtIqk3uSXKtvcXAMyGEOuAOkuXET5LMcB9LUhXzd1s5Tkm7s+GuxuHNmzdvu+JGEoq6gB9s5vHjSSrpXTakvZbkIHE+A9fCWk1SpvtcoCpv2zlsWm2wnWRG43Jg2pC+i0jOt3kqHdta0uIABcb3QZJzgjpJZhluAA7Oe3wKyaxF/wF+c7r9+QyudrgnSXhsSse36EXetwh8r0D7IuDabfwMSkiWoT2cvi/N6XivAvbN+xx+l/bfQTL7eCfwxiF9vZLkPKWOdIzXpu3nULjq4OOb2YebXmyfScLG1enn3kpSev6ktN87hzz3Xek+dTGkMiJJmf/70n1vIQmOJw55/kUUqJq3tZ/vi7z//5L23QbUDnnsAJLA8Gz6eAPJLNT7tqLfa9l8tc1FedudRDKb1JK+xjzSqodD+jspfZ86SM6l+n8kPyeRtCLgFsZy0RbGEvO2O5Tk0g0NJD9TD7NptchPAnNJfi47SQLW1cCe6ePlJJdoeITkd0MbSeC6iLzfC968eRu7t/5yqpIkSSNSCOEWkvC8/3CPRZK2lksHJUnSiBFCuAx4iGQJbT3Jsr7TSWZ1JWnUMGhJknZIWmRkS/pi3vWjpBdRTFIZdBrJkr8ngPfEGH86rKOSpG3k0kFJ0nYLIcwBXniRzb4cY7xopw9GkqQRxBktSdKOWEFSae3FtpEkaUxxRkuSJEmSMuYFiyVJkiQpYy4dLCCEEIAZJNcpkSRJkjS21ZBchH6rlwMatAqbASwb7kFIkiRJGjFmAsu3dmODVmHNAEuXLqW2tna4xyJJkiRpmDQ1NTFr1izYxtVuBq0tqK2tNWhJkiRJ2mYWw5AkSZKkjBm0JEmSJCljBi1JkiRJyphBS5IkSZIyZtCSJEmSpIwZtCRJkiQpYwYtSZIkScqYQUuSJEmSMmbQkiRJkqSMGbQkSZIkKWMGLUmSJEnKmEFLkiRJkjJm0JIkSZKkjBm0JEmSJCljBi1JkiRJyphBS5IkSZIyZtCSJEmSpIwZtCRJkiQpYwYtSZIkScqYQUuSJEmSMmbQkiRJkqSMGbQkSZIkKWMGLUmSJEnKmEFLkiRJkjJm0JIkSZKkjBm0JEmSJCljBi1JkiRJyphBS5IkSZIyZtCSJEmSpIwZtCRJkiQpYwYtSZIkScqYQWsEa+vqYc7nbmbO526mratnuIcjSZIkaSsZtEYhA5gkSZI0shm0JEmSJCljBi1JkiRJyphBazfikkJJkiRpZDBojQEGMEmSJGnXMmiNYQYwSZIkaecwaGkTBjBJkiRpxxi0tNUMYJIkSdLWMWhphxnAJEmSpMEMWtppDGCSJEkaqwxa2uUMYJIkSdrdGbQkSZIkKWMGLY0YznRJkiRpd2HQkiRJkqSMGbQ04jnTJUmSpNHGoCVJkiRJGTNoaVRylkuSJEkjmUFLkiRJkjJm0NJuZXMzXc6ASZIkaVcyaGlMM4BJkiRpZzBojRIxxuEegiRJkqStVDLcA9DWOfWbf+PEfSZy4j6TOHL2+OEezm6vrauHg7/0FwCeuPgMqspKttguSZIk5fMocZRY09zJDQ+v4IaHVwxqv+vptZx24FTKSpycHE4GMEmSJOXzaHCUuOacY3hwSQP3PreeR5Y20NOXLCX86E8fpK6ylDMOmcqrDpo6zKPUUAYwSZKkscmjvlHiuL0ncuqBU/kUsLa5g2MvvR2AiePKWN/Sxa8WLONXC5bltv/Z/Ys5YtYEDpxWQ3FRGKZRS5IkSWOTQWsUqi4f+Nju/I9TeHx5Ezc/toI/PraKDa1dAFx685O5bWbVV+a+vu/59Ry318RBfWjXc6ZLkiRp9+bR3ShXXBQ4YZ+JnLDPRD5zxgG85Mu3AnDK/pN5anUzKxs7WLqhPbf9B65dQFGAA6bV8pKZdbn2nt6+XT52bcoiHJIkSbsHj9Z2IyXFAwUxrnz3UVSVlbCxtYuHlm7kA9cuAGB6XQUrGztYuLKJhSubctsf/ZXb2HdKDftPHcdek6pz7V09fVSV7bp9kCRJknYHBq3d3ITqMo7fe2Lu/u2fegVN7T08uGQj97+wnh/fuxiA7t64SfgCOOqSW5leV8ns+ir2mFCRa1+4sokDp9W6BHGYFZrpcvZLkiRp+HkENgZNq6vgdYdN55QDJueC1l/OfzlLN7Tz1OpmFq5s4qZHVwLQF2F5QzvLG9oH9fG2788DYHJNObPrq3LtT61q5vCZ4ymyAMeIYwCTJEnadTzSEgCz6qs4YFotrzp4Km1dPbmg9bdPn8La5k4Wr2/jubUtXHnncwCMryqloa2btc2drG3uzPXzlivvpbaihGPn1HPELC+sPBoYwCRJkrLnEZW2aHJNOXtOrOaYOfW0dfXkgta9nzuN7p7IovWtPL26mU//5lEAqsqKaero4fYn13D7k2ty/Xzw2gWcuM9Ejtt7IvtPHTcs+6JtYwCTJEnafh45abvVVZVyeNV49ps6Lhe07rvgNBatb2P+CxuY9/x6bl+YhK15z69n3vPrASgvGSja8fCSBl66V/2gQh4a2ba1MqKVFCVJ0ljkkY0yVVJcxEtmjuclM8dz9nGzcwfSX3z9QTy0pIH7X9jAupaBpYZnX30/NeUlHLf3RF6614ThGrZGEAOYJEnaHXgEo13i7ONm86GX702MkSdWNvH6794DQF1lKY3t3dy2cDW3LVyd2/4rNz3BGYdO5/i964dryBphnBmTJEmjiUck2qVCCIOu0zX3s6eyaH0b9zy7jrueXsu9zyXLC38+fyk/n7+UqrJiTtxnoDx9e1evB9LaKgYwSZI0nDzy0LAqKgocukcdh+5Rx3tP2DN3YPxPx8zkrqfXsrqpk9sWDhTVOObS29hjfOWgsLZoXSsHTa8lBEvKS5IkaWQYEUErhHAu8GlgOvAP4PwY491b2H48cCnwVmAC8ALwqRjjH7e3T40sXz7zECpLi/nHiib+9PhKrrgjqXYYIyzb2M6yjQPX9Xrdd+9hel0FJ+wzkWP29DwvbZkzXZIkaVcY9iOMEMI7gW8D5wJzgY8AfwohHBxjXFJg+zLgVmAN8HZgGTALaN7ePjUyhZDMdu09uToXtO757Kks39jOEyub+PKNTwBQWhxY2djB7x5czu8eXJ57/keue4C9J1Uze2I102rLh2UfNDoYviRJUtZGwtHEJ4EfxhivTu+fH0I4A/hX4IIC238AqAdOjDF2p22Ld6TPEEI5kH8kXrNde6Kdrr66jJkTqjhsZl0uaN13wSt5YmUT9z63nnueWcdjyxsBuPuZddz9zLpN+nj15Xex75Rx7Dt5HLPqK3fp+DW6WIBDkiRtr2E9Okhnp44Gvj7koVuAEzfztDOBecAVIYQ3AWuBnwPfiDH2bmefFwAXbvseaCSoLCvm5ftN5uX7Tea80wYOgC8682BWNXayZEMrL6xrZeHKZNKzf+nhnU+tHdTPad/6G4fOqOPQPWrZd4oXVda2M4BJkqR+w30UMAkoBlYPaV8NTNvMc/YGTgN+BrwO2A+4gmRfLt7OPr8GXJZ3v4ZkSaJGsXccM6vgDMRPPnAsyzZ28OyaFp5e3cQ9zyaVDlc1drCqsWNQmXlIZsAmjiunvqqUusrSXPuvFyxlSk0FdVWlVJYW76K90mjkzJgkSWPPSPmrHofcDwXa+hWRnJ/14RhjL/BACGEGSeGLi7enzxhjJ5C7iq7V63Zvx8yp5+T9CwewZ9a08o8VjTy+vJGnV7cAmxbf6Hfh/z1RsP83XzGXg6bXsv/UGvaaVLWT9kK7MwOYJEmj33D/9V4H9LLpTNMUNp2R6rcS6E5DVr+FwLR02eD29CmlAWwKMPhA92cfeimtnb1sbOtiVWMHl9/2DACnHjCZ5o4eGtq72djaxfrWLgCeXt2SC2n53vPD+Ry2Rx0HTa9h78nVmzwuvRhnxiRJGj2G9a9xjLErhPAAcDrw+7yHTgf+sJmnzQXODiEUxRj70rb9gZUxxi6A7ehT2qwjZ08YdEDbH7Su+OejCh7oXvnPR7JofRtPrWpm4cqmXOh6YPFGHli8cZP+z7v+IQ6YWsO+U8Yxc4LFOSRJknYHI+G/PS8DrgshLCApcvFhYDZwFUAI4SfA8hhjf7XA7wPnAd8JIfw3yTlanwe+u7V9jhZVZSUs+vrrh3sY2kanHDClYAD7+lsP47m1LTyxsoknVjSxsS0pmnn7wjXcnndR5n5vvmIu0+oqmVpTzoTqslx7Q1uXMxbaKs50SZI0fIb9r26M8ZchhInAl0guLvw48LoYY3/J9tlAX972S0MIrwYuBx4FlgPfAb6xDX1Ku9yZR8zIHei2dnZzyIW3APD51x3I4vVtPLumhWfXtLzoEsQTv34H02orOGh6zaDqiL97cDkxRpo6enJttz6xmuP2msi0uoqduWsaZbZlCaJhTZKk7TMi/mLGGK8ErtzMY6cUaJsHHL+9fY52znSNfvkFV959/J4FD3T/971H09DWzZrmTpY3tPPz+weutb2qqYNVTR3ckVei/os3PL7J63z8Fw8DMLW2nEP3qMu1r2nqYM+J1RZ+0Xbb1gBmYJMkjTX+pduNGMB2Ly/bd9KgANYftOZ//pUs2dDGwpVNPLq8kV8vSK5EcPJ+k6guL6GkOHDjIysBOHBaDc+saWF1UyermwaWJ57yzb8xrryEfSZXs+fEgcIcDyzeyKwJVUyqKSdstvCntHkGMEmSEv5FGwMMYLuXcRUlHDOnnmPm1NPW1ZMLWle95+jcUq/+oPW7c08kEPjHikb+vmgD3/jzUwAUFwVaOnt4ZFkjjyxrzPX9nh/Oz32df22w/7zhcQ6YVsPek8YxY4LLELXzWWFRkjTa+RdK2s1VlhVzzJx6Dp5RmwtaD3zxVaxt7uS5tS0sXNnMd25PKinOmlDJupYu2rt7ae8euILCbx9cXrDv91/zd2aMr2RqbQX11QMXc35iZRMTq8upLivG1YnaFbY1mBnYJEk7m39ZxjBnusauspIi9ptaw35Tazh5/8m5oPWXT5xMVVkJrZ09LN3Yxmu+fTcA556yD0s2tPHc2lZeWNdCR3dSn+b+FzYU7P/t359XsP3Vl99FfXUZE6rKqKkY+PVz86Mr2XtyNTPGVzKu3F9LGj5ZBDZDnCQJDFoqwACm6vISZtdX5e7/+2n75g4WWzq6OfSipGLi1992GA1t3axq7GBFQzu3PJFcE3xKTTntXb20dvXQl3eq17KN7Szb2L7J6336N4/mvi4pGpgC+/gvHmJqbQWTx1VQWznw62pVYwez6qsoLS7KZoelXWBnz645eydJI4u/bbXVNhfADGZjS1FeEDrz8BkFD+bu/PQpVJWVEGNkY1sXR11yGwA//9BxtHf3sqG1i9VNHXzzlqcBOGbPCUklxcYOevKS2a1PbHp9MYDTvvU3QoCJ1WVMGleea//F35dyyPRa9p0yjsqy4oLPlUaL4QpmkqRs+FtV0k4TQqAir6jGEbPHDzpY7A9aP/ngS6kqK6G3L7J4fSunfetvAHzx9QfR2N7NupZOVjUOlLMvKQr09EXWtXSxrqUr1//FNz6R+3p81cA5Y7cvXMPL9p1Efd6FnyUV5syYJGXD35LaaZzp0rYqLgqDLq589nGzCx7kPfyl0+no6WNNUydLNrTy0Z8+CCQl7l9Y38qyje00tHXn+jnv+ocA2GdyNUfNnpBrj9ES9tKOMphJUmH+1tMuZwDTjioqCkwaV86kceXMmTRwLll/ifv2rl7+sbIxV5Rjn8nVPLe2NXfrd+o3/8axe9Vz+My6TV5D0s5hARFJY4W/ySTtdirLijl4em3u/o3nnURHdx8PLN7Ivc+t45q5iwBY09zJzY+u5OZHV+a2fffV9/OSmeM5eHote0+uHtq1pF3IACZpNPM3lkYMZ7q0M9VXl3H6wVN52b4Tc0Hrx+8/lseWN3Lf8xu459l1ADy4pIEHlzRs8vx/+fECptZVMLmmnPGVA+d/Ld3QxpxJ1ZSXWHxD2lW2NYAZ2CQNB3/TaMQzgGlnOXavel5xwBQ+cNLAQdjX33oYz65p4YmVTTy+opGm9h4A5j63vmAfZ6TXGptcU8602oHzy66fv4R9p9SwZ30VE/Iu5ixp5zGASRpJ/I2iUcnwpZ3lzCMGSta3dnZzyIXJNcO++pZDaWzvYW1zJ6ua2vnjY6sAqCgtoqO7j7XNnaxt7sz1c8lNC3Nf51XE59O/eZQZdRVMqamgrmrgV/CG1i7KS4opzt9Y0rCwwIekLPgbQrsVA5iyFMJA6HnzkXsMOtjqD1oPfPFVdPZEVjS08/y6Fj52/cMAnHrgZJZvbGfJhjY6uvty/eSfD5bvpG/cQVGA8VVlg0rT/2L+Eo6dM5EDptVkvn+SsmEwk1SIP/EaE7zYsnaWEAL11aXUV5cNKp5xxdlH5S7avHh9K6d8M7k22H+8en8a2rpZ09zJqsZ25i/amHtOX0xmtja05l0bLJ0ZKysp4sC8sPV/D69gck05dZWllJcW7ezdlJQhg5k0NvgTLBVgAFNWQghMyTt36wMn7VXwoOqRC0+ns6ePDa1drGho5wPXLgDgpH0n8tjyJhrbu3l0WWOun8/97rGCr/euH9zHITPqOGh6DXMmWjVRGu0MZdLo5U+ltA2cGdPOUlpcRF1lGVNqKphdP3BtsB+89xgqS4tZvL6N+YvW85nfJAHrhL0n0tLZQ2N7Nw3tXbmiHY8uaxwUyPqd/b/3M2diFbPrqwYFv66ePqrKdvLOSdplLAgijRz+NEk7kcFMWQghMGdSNVNqy3NB64fnHFNbhF8HAAAgAElEQVTwf7a/9Y7DeX5tC0+ubOaJlU2sbOwA4OGlDTy8dNOy9UdcfCuTxpUzva6CKbXlufYf3v0CE6rLKCsZOE/tkaUN1FSUUlpcRG8cOO+sry9mv9OSMpVVABvNwWxb92k076tGBr9jpBHEAKYd9dpDpxU8SLj8nYezuqmTpRvaWLSudVC5+nUtnaxr6YTlA/1869anN+n7rP+9v+BrHnHxrUytrWBqbTmTagbC2s/vX0JtZSlVZcWDKi8+tryR6rISikKgu28gsPUa2KRRK6sQk0X7zg5IBjBtLb8zpFFgWwKYYU2FnHFI4QA297On0tDezcqGDpZsaM0V33jzETNo7+6lsb2b+57fAMDMCZX09Ea6e/vo7OmjpTNZrtjTF1ne0M7yhvZBr/mVmxdSyDv/576C7UddciuzJlQxq76KGeMHljcuWLSBPSZUMbmmnGKr30saoZwZ01B+0tIoZgDTjppQXcYeE6o4ZEYdbV09uaD11bcetsn/DN/yiZMLHjjc/qmTaWzvYXVjB0s2tvG1Pz4JwKsPmUpXTx/tXb20dvbw+IomAKbXVRAj9MZIT28fG9u6AejujTy/rpXn17UOGuN7f/T33NdlJQMVFj963QNMqa1g4rgyasoH/pzd8eQaqstLKC0uoqd3YMasoa2LytLiQWX7JWm4GMB2f36i0hjneWTaUdPrKtln8kAA6w9a337nEZsJZq8o2H7rJ09mbXOyvPG5ta384K7nAZhdX8WG1i5aOnvo6hkITnc9s67geP7t5w8VbD/x63dQVlzEpHFlTBw3UAHkZ/cv5oCptew1qXrQNcwkaTg4M7b78BOSJI0Ie4yvZL8pNbBPckDRH7T+fP7LqSorob2rl2Ub2zj98rsAuORNh9DU0cOG1i5WN3VwU3ox6MP2qKUvQk9vpKu3jxfyZsi6evtY0djBirRICMClNz+Z+7o0b23ihf/3D2ZNqGJ6XQUTqi3NKGlkGknnr2kw311J28SZLg2XyrJi9phQmbv/tqNnDjqg6A9av/zICQUPNB76z1fR1t3H2uZOlm1s49/Tma/TDpzC0g1tLF7fRlfeUsNfL1hWcByv+K872bM+OZdsWt3AuWS3L1xDTUVykep+z6xupq6yjLKSIvry2vO3kaThZgDbOXwXJWXCJYga6cpLi5lQXc4e4yvZf+q4XPv3zj6SqrISevsiz61t5tWX3w3Auafsw7qWTlY2drC8oZ3n1yYzY2ubO1nb3MmCxRsH9X/e9ZsuWXzTFfcWHMshF95CWXERZSVFg2bRPnLdA+w9qZrZE6uZXlde8LmStKvs7KqRu7uxsZeSRpxtDWYGNu1sxUWBmRMGLhb976ftW/Ag4ZcfOZ41TZ0s3djGC2tb+fUDyczX4TPr6OmLdHT38lwayuqry+juSao05s+WQbKMcWjb3c+s4+4C554d/ZXbqK8qo766jLrKgT/d//azB2nu6GFjW1euqAgkJfcrS4upKiumPK+AyKU3L2T/qTXsNamaaQY5ScNsdw9gu9feSBpzDGDa1Q7bo46qvQYCWH/Quv7Dx29yDsQ9nz01d+DQ0tHNoRfdAsBdnzmF4qIiunv6aOzo5k3fmwvAxW86hBVpqf3n17by5KpmANq7elnetWkJ/TueWltwjF09fXT19NHY3j2o/Wf3Lym4/T9dNY/66jLGV5VRU16ca//F/CWMrypLr4U2MPPW2d272x0QSRo5dpcANjpHLUnSKFOUd9XmSePKB82W9Xv7kPPO+g80/nz+y2nv6mVjWxerGjv4/O8fB+CiMw9mak0F46vKqCwr4s3pUsVbP3kyAWjr6qWhrStXIv8DL5vD0o3tLFrXyqL1rXT3JueK/SMtvT9Uf7n/oY685DYmjStnxvjkQtX9fvfgcmaMr2BidTlVZcUFnytJY4VBS9JuyZku7U5m11cNCmD9Qesdx8wqGNj2GF9ZsP0/zjgg197c0c1h6Qzb9//5qCSUtXeztrmDq/6WVHx81UFT6Eyvhdbc2cNT6QwbwLqWTta1dA4a5xdveLzg+N98xVz2GF/J9PGVTMorrf/wkgam1lVQ5pWoJe2GDFqSxhQDmJQozpthe8UBkwcFs/6g9d2zjiw4w3bv505lQ2s3KxraWbyhNVci/+X7TaKhrZv1LZ2sbenMzZg9vbqFp1e3bDKGs6++f5O213/3HqbVJjNl+dc7e3DxRvacWM2UWs8tkzQ6GLQkjXmGL2nbjK8qY8b4Kg7do462rp5c0Pqf9xydC2atnd0ccuEtaftRbGjtZmVjB0s3tPH7h5YDMGtCJY3t3TR1DMy6vbCuddC1z/q9+4fz815/4MLSn/71I0wcV874ytJByxX/8o9VlBUXE0kKlPR7ZGkDe06sZnKNgU3SzmXQkqTNMIBJ2y/kFc94+X6DZ8z6g9ZfPnEyVWUlg5YxXvv+Y2lo62Z1U1JW/yfzFgMwc0Ila5o76erpoyGvwuLNj60q+Pqf+OUjBdvP+t/70/ElVSH7fez6h6ipSMJaWV6lxt8/tJzJ48qpqyylvHSgvbfPa6FJ2jKDliRtIwOYlK38ZYwv3at+UCjrD1q3fOJkKkuLaWzvZtH61lzhj8++5oC06Ec361s7+WMavI6aPZ6S4iL6e77/hQ0ATK+rYG1zJz19kfUtXbnXvW3hmoJj+8LvC593dthFt1BeUkRVWTGVeTNp513/EJPHlTOhuoxx5QOHWU+saGLmhKpByyEl7d4MWpKUEQOYtHOFEBhfVcb+eTNO7ztxzqBg1h+0fvqh4wqeX3b7p15BRUkxG9q6WLy+lbd9fx4AX3rjwfT2Rlq7emhs7+aauYsAOGnfSbR09tDU3k1DezcbWgfCWWd6jbT8a5jdvpnA9var5uW+zl/6+N4fzqeyrJiK0uJBF6/+4T0vML2uknF55fa7evqoMqdJo4ZBS5J2Mi/CLI0sRUUhLbE/EGLedezgCo79QesH7z26YGCb+9lT6YvQ3t3L+pbO3JLEL73xYFo7etjQ1sXa5k5uenQlAJNrytnQ2kVvXxy09HHB4o0Fx/itW57epO2Ii2+lrrKUKTXlg5Y9/vdfn6WuspTqsmJK8sLag4s3MnFcOdVlJRQNZFO6evqAHrp7I80dA2NZ3tBORUkxMUJr10D74vWtVJeVEgJ09gyc7+bySWnLDFqSNMIYwKSRb0J12UAAm1CZax8a2PqD1t8+fQoVJcU0tHezdEMrb0qXPl7+zsOJETq6+2ju7OZrf0wKi7zx8Ok0tHWzrqWThSsHyuo3tndvciHq79/5XMEx5hcQyXfExbcWbD/9srsKtr/2O/cUbD/solsYV15CXWXpoJm3y259mr0njWNW/eBy/iNJnyFRu4BBS5JGCWfGpNGtqChQX11GRV5RjTMOmTYomPUHrW+87SVUlZVsUla/pbOXtc2dLNvYxmd/+xgAZ710Fl09kbauHpo7urnn2fUAzKqvpL2rl9bOXtrzKi9uTnlJEUUhUBSSZZotnUk1yHHlJcQY6Y2Rvtg/I5Zo6ezJbdfv6rtfKNj/8V+7nbLiIkqKigadl/fR6x5gck0F9dWl1FQMHJr+9L7FuRDa0jkQLi+75WkqSospLgrEGAe190Vozbt23L/8eAHNnT00tHXT0Daw7PPQi26huqyYcRUlVJcNvOZHrnuAytJiSkuKKM4r6HLZrU8zoaosnTUc+Pzmv7CB2srSZCaQgbHkj0tjl0FLknZTBjBp95KU1S9h/6k1tHX15ILWf77h4ILLG/9y/skFL1A974LTqK0opaQ40N3Tx6Fp+0NfOr1gP/O/8MrNLp/s6o00phe6/pefPADA2S+dlZTy39jOso1tdHQnwaypfXAg63fXM+sKtn81DZ1DXX1P4SBXqH3uc+sLbgvQ2tVLa1cvMHDh7bs3M5bNhcdzrvl7wfbDL76VidVlTKwuH3RO3vf++iyTa5IqlvmBe/H6Vuqry6koLTak7UYMWpI0xhjApLEnfwaprrI0F5x25DyrQcsn82aRvpgX/PKvp3bjeS+jpKiInt5IS2d37ry2S950CC2dvWxo7WRtcyc3PLwCgNccOo2qsmLKS4opLoKf3rcEgPedsCchBHr6kmIkv16wLNdeVV5CUYAr7kiWU37trYcypaaC8VWllJcU8Yb/ngvAPZ89ld6+SHNHD+tbOnlfGpgufcuhAHT39NHS2cM303Pl3nP8bDp7+mjt6qWpvTsXyPaeXE1XWhSlo7uX5vSacD29kdVNnaxuGghxAFduZpnn5pZnHnvpbZSms4AleZ/hR657gCk1FUyqKaO2YiDI3fvc+mTmrbyYkNdPZ3cvlaXFaNcyaEmSgMIBzOWKknZE/vXU9pk8rmAwe9vRMwe19wety95x+KD2/qD12dceOKi9P2j1t7d19eSC1puO2KPga9ZvJiS+5cjB2/cHrQted1DBWb2bzjupYPttnzyZ9q4+1rV2sqqxnQt+l1wm4B3HzMyFtY2tXTy+ogmA6vJiOrr7Ngm+rZ29wKbLPjc38/ahHy8o2H7kJbcBDKps+e6r7+eAaTXsMzk5n07ZM2hJkjKzrcHMwCZpdzRjfOWgANYftC4685CCwezvX3gVVWUldPf2saG1k+O++lcA/vTxkygtLqI7nQX8p6vuA+CSNx+SzsZ1saqpg5vToiv7TRlHR09vcm5eV/Jvvu7egSD34JIGHlzSsMnYz/zeXGZNqGTmhCqm1Jbn2h9b3kh1WQnFRYHu3oHz9BrauigtLqI079w1JQxakqQRx8AmaSwqLS6iJm8p4J4TqwvPAh41eBawP2j94d9fVvg8u8+/kqKiQGN7F6/8VlJd8r/e/hKWbmjjmTUtPL26mefWtgLw7JoWnl3TssnY3vk/9xUc84lfvwOAitIiqvMu0v3mK+ZSFAIxQm/eeWdvufJeSovDoGIjAB//xUOMryxjXEUJFXnLHEdzhUiDliRpt2UAkyQYV1FCVVnJoGvHvf4l0wuGsqvfezRrW7pYtrGNRevbciFuel0FfTHS2wc9fX2DrgcHSXXIju6Byo5Pr940rAE8taq5YPutTxS+2HdRUSjYPhoYtCRJY44BTJIKO3HfSQVny27/1CsKBrNHLjydGKG5o4d1LZ285crkGnFXv++YXAGOzp5ePnBtcv7Y1e89muLiIvr6Im1dvZx3/UMA/OcbDqKzp4/mjh4a2rq4fv7SXbfTO4lBS5KklAFMkrZNaXERVWUljK8qY2LeBapP3GdiwWWPQ4Ncv7NeOntQu0FLkqQxwAAmSdpWBi1JkrZTFiXxDXGStHsyaEmSNAIZwCRpdDNoSZI0ijhjJkmjg0FLkqQxyMAmSTuXQUuSJG03A5gkFWbQkiRJmXNmTNJYZ9CSJEnDylAmaXdk0JIkSaNKVueXGfAk7UwGLUmSpK2wswObAU/avRi0JEmSdqFtCVRZha+sQp+zgNLWM2hJkiSNMqNlFs0AprHMoCVJkqRdameeTzdcs3HO9mkog5YkSZI0xEgLZjszhGrnMGhJkiRJY9hIC2AjbTzbK8QYh3sMI04IoRZobGxspLa2driHI0mSJGmYNDU1UVdXB1AXY2za2ucV7bwhSZIkSdLYZNCSJEmSpIwZtCRJkiQpYwYtSZIkScqYQUuSJEmSMmbQkiRJkqSMGbQkSZIkKWMGLUmSJEnKmEFLkiRJkjJm0JIkSZKkjBm0JEmSJCljBi1JkiRJyphBS5IkSZIyZtCSJEmSpIwZtCRJkiQpYwYtSZIkScqYQUuSJEmSMmbQkiRJkqSMGbQkSZIkKWMGLUmSJEnKmEFLkiRJkjJm0JIkSZKkjBm0JEmSJCljBi1JkiRJyphBS5IkSZIyZtCSJEmSpIwZtCRJkiQpYwYtSZIkScqYQUuSJEmSMmbQkiRJkqSMGbQkSZIkKWMGLUmSJEnKmEFLkiRJkjJm0JIkSZKkjBm0JEmSJCljBi1JkiRJyphBS5IkSZIyZtCSJEmSpIwZtCRJkiQpYwYtSZIkScqYQUuSJEmSMmbQkiRJkqSMGbQkSZIkKWMGLUmSJEnKmEFLkiRJkjJm0JIkSZKkjBm0JEmSJCljBi1JkiRJyphBS5IkSZIyZtCSJEmSpIwZtCRJkiQpYwYtSZIkScqYQUuSJEmSMmbQkiRJkqSMGbQkSZIkKWMGLUmSJEnKmEFLkiRJkjJm0JIkSZKkjBm0JEmSJCljBi1JkiRJytiwB60QwrkhhBdCCB0hhAdCCC/fwrbnhBBigVtF3jYlIYSvpH22hxCeDyF8KYQw7PsqSZIkaWwoGc4XDyG8E/g2cC4wF/gI8KcQwsExxiWbeVoTcEB+Q4yxI+/uZ4GPAu8D/gEcA1wDNALfyXQHJEmSJKmAYQ1awCeBH8YYr07vnx9COAP4V+CCzTwnxhhXbaHPE4A/xBhvTu8vCiGcRRK4JEmSJGmnG7bldCGEMuBo4JYhD90CnLiFp44LISwOISwLIdwUQjhyyOP3AK8MIeyfvs7hwEnAH7cwlvIQQm3/DajZ1v2RJEmSpH7DOaM1CSgGVg9pXw1M28xzngTOAR4DaoGPA3NDCIfHGJ9Jt/kGUAc8GULoTV/jCzHG67cwlguAC7dnJyRJkiRpqOFeOggQh9wPBdqSDWO8D7gvt2EIc4EHgfOAj6XN7wTeDZxNco7WEcC3QwgrYow/3swYvgZclne/Bli2bbshSZIkSYnhDFrrgF42nb2awqazXAXFGPtCCH8H9str/i/g6zHGX6T3Hwsh7Ekya1UwaMUYO4HO/vshhK3aAUmSJEkqZNjO0YoxdgEPAKcPeeh04N6t6SMkiegIYGVecxXQN2TTXkZAKXtJkiRJY8NwLx28DLguhLAAmAd8GJgNXAUQQvgJsDzGeEF6/0KSpYPPkJyj9TGSoPVveX3eCHwhhLCEZOngkSTVDX+0K3ZIkiRJkoY1aMUYfxlCmAh8CZgOPA68Lsa4ON1kNoNnp8YDPyBZbtgIPAScHGOcn7fNecAlwJUkyxBXAP8DXLwTd0WSJEmSckKMBetOjGlpiffGxsZGamtrh3s4kiRJkoZJU1MTdXV1AHUxxqatfZ7nLUmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxgxakiRJkpQxg5YkSZIkZcygJUmSJEkZM2hJkiRJUsYMWpIkSZKUMYOWJEmSJGXMoCVJkiRJGTNoSZIkSVLGDFqSJEmSlDGDliRJkiRlzKAlSZIkSRkzaEmSJElSxoY9aIUQzg0hvBBC6AghPBBCePkWtj0nhBAL3CqGbLdHCOGnIYT1IYS2EMLDIYSjd/7eSJIkSRKUDOeLhxDeCXwbOBeYC3wE+FMI4eAY45LNPK0JOCC/IcbYkdfnhLSvO4DXAmuAfYCGzHdAkiRJkgoY1qAFfBL4YYzx6vT++SGEM4B/BS7YzHNijHHVFvr8LLA0xvj+vLZFOzxSSZIkSdpKw7Z0MIRQBhwN3DLkoVuAE7fw1HEhhMUhhGUhhJtCCEcOefxMYEEI4dchhDUhhIdCCP/yImMpDyHU9t+Amm3dH0mSJEnqN5znaE0CioHVQ9pXA9M285wngXNIwtRZQAcwN4SwX942e5PMiD0DnAFcBXw3hPDeLYzlAqAx77ZsW3ZEkiRJkvIN99JBgDjkfijQlmwY433AfbkNQ5gLPAicB3wsbS4CFsQYP5/efyiEcAhJ+PrJZsbwNeCyvPs1GLYkSZIkbafhnNFaB/Sy6ezVFDad5SooxtgH/B3In9FaCTwxZNOFwOwt9NMZY2zqvwHNW/P6kiRJklTIsAWtGGMX8ABw+pCHTgfu3Zo+QggBOIIkXPWby5CqhMD+wOLtG6kkSZIkbZvhXjp4GXBdCGEBMA/4MMnM01UAIYSfAMtjjBek9y8kWTr4DFBLslzwCODf8vq8HLg3hPB54FfAS9N+P7wrdkiSJEmShjVoxRh/GUKYCHwJmA48Drwuxtg/+zQb6Mt7ynjgByTLDRuBh4CTY4zz8/r8ewjhLSTnXX0JeAE4P8b4s529P5IkSZIEEGIsWHdiTEtLvDc2NjZSW1s73MORJEmSNEyampqoq6sDqEvrOWyV4SyGIUmSJEm7JYOWJEmSJGVsh4NWCKE2hPDmEMJBWQxIkiRJkka7bQ5aIYRfhRD+Pf26ElhAUt3v0RDC2zIenyRJkiSNOtszo3UycHf69VuAQFIN8GPAFzMalyRJkiSNWtsTtOqADenXrwF+G2NsA24G9stqYJIkSZI0Wm1P0FoKnBBCqCYJWrek7ROAjqwGJkmSJEmj1fZcsPjbwM+AFmAxcGfafjLwWDbDkiRJkqTRa5uDVozxyhDCfGAWcGuMsS996Hk8R0uSJEmStmtGi/j/2bvvOCvK6/Hjn2epIkVFURExUYkFOwqIHcHYayzYYkEFFY0p/qImiolfMDGJXSwYe41dY0HEDoqiqNg1REXsZUGQ/vz+GDaz4u5y7+7dnXvvft6v17yYOXtn9mzuP56cZ84T44sk0wYJIbQANgTGxxi/KWBukiRJklSS6jPe/YIQwtGLz1sATwIvAR+FELYvbHqSJEmSVHrqMwzjF8Ari8/3AH4KrEvy7tb/FSgvAcybBcM7Jce8WVlnI0mSJClH9Sm0VgQ+XXy+K/CvGOM7wNUkSwglSZIkqVmrT6H1GbD+4mWDOwNjF8fbAQsLlZgkSZIklar6DMO4Brgd+ASIwKOL432AtwqUlyRJkiSVrPqMdx8eQphCMt79XzHGuYt/tBA4t5DJqRbzZsGIrsn56dOh9bLZ5iNJkiTpB+o73v2OGmLXNTwdSZIkSSp99XlHixDCdiGE+0MI74UQ3g0h3BdC2KbQyUmSJElSKarPPlqHkgzAmA1cBFwCfA88FkI4uLDp6X8mXQcxZp2FJEmSpBzUp6N1BnBqjPHAGONFMcYLY4wHAr8H/ljY9Jq5uCg9f+Q0uGUQzPqy9s+775YkSZJUFOpTaK0J3F9D/D6SzYtVKKHa19OiNbzzEIzqB/95IrOUJEmSJC1dfQqtj4Ada4jvuPhnagxH/BtWWhe++wxuzXOFpp0uSZIkqUnVp9D6O3BRCGFUCOGwEMKhIYTLgQuBvxU2Pf3Pyj3h2Ceg97E/jH/+ZhbZSJIkSapD3oVWjHEUcBCwIXABSYG1AXBgjPGKwqanH2i1DOx6HhxwfRq7ZhcYfzEsWlT7fZIkSZKaVH330bobuLt6LITQKoTQPcb4YUEyU+3WHpCeL5wHY/4A7zwCu/09u5wkSZIk/U+99tGqxfrA1AI+T7nY5TxotSz892kYXdOrc3Xw3S1JkiSpURSy0FIWNj0EhjwN3baAuTPTeOW07HKSJEmSmjkLrWLWelkYXpkcrZet/XOd14IjH4bt/l8au3wbeOQMmP114+cpSZIk6QcstMpFi5aw1cnp9cK5MOESuHDjZFiGJEmSpCaT8zCMEMJGS/nIOg3MRYV04E3wxEj4bEryb5VFC5Z+77xZMKJrcn769Lq7aZIkSZJ+JJ+pg5OBCIQaflYVj4VISgWw1g6wzq7w2r9g3J+hcvFe0lfvBDuPhLX6Z5ufJEmSVMbyKbR+2mhZKD9V724tTUUFbHwg9BgIf1389X3xFtywD/TYCXY4o3HzlCRJkpqpnAutGOMHjZmIGlHLNun5FoNh0rXw7hh477HMUpIkSZLKmcMwmpuBf4Ljn0uWFcaFaXzSdbBoYe33gftuSZIkSTmy0GqOVuwBg26BQbelsUdOg6t2gI9eyC4vSZIkqUzk846Wys1Pt0nP23SET16BqwfAxgdll5MkSZJUBuxolZNcNziuyZBnYJNDkvNXbk3jMYdBki4plCRJkn7AQkuJZVeEvS+Do8bAyj3T+K2DoBWJVxEAACAASURBVPLj7PKSJEmSSlDeSwdDCC9T835ZEZgDvAdcG2N8vIG5KQvd+8CRD8G53ZPrqU/BqC1h17/DOrtkm5skSZJUIurT0XoYWBOYBTwOPAF8B6wFvACsCowNIexVoBzV1Cqq1d+rbgJzKuGuwXD3kOxykiRJkkpIfYZhrAj8Pcb45+rBEMIfgDVijDuFEM4G/gjcW4Ac1VC5bnBck1/eB89fAU/+Bd66P797582CEV2T89On5//emCRJklSi6tPROgC4pYb4rYt/xuKfr1PfpFREKlrCdqfC4LHQuUcav/1w+HpqdnlJkiRJRaw+hdYcoF8N8X6Lf1b13Ln1TUpFqOumcNTD6fV7Y+HSPvD4CJj/fXZ5SZIkSUWoPksHLwYuDyH0InknKwK9gcHAiMWf+TnwckEyVOPJd0lhq2XS859sA/99OllSOPnm/H6vSwolSZJU5vIutGKM54QQpgInAoctDr8NHBNjrPov7suBUYVJUUVp0K1JV+uRM6DyozT+9X9glQ2zy0uSJEkqAvXaRyvGeFOMccsY4wqLjy2rFVnEGL+PMc6p6xkqcSFAz73hxInQ76Q0flV/GHcOzJudXW6SJElSxuqzdBCAxUsH1yNZOvhGjNGlguUinyWFrZeF7X8P4y9KrhfOg6fOg1dugwFnNV6OkiRJUhHLu6MVQugSQhhH8n7WRcAlwKQQwmMhhJUKnaBKzH5XQ6fVofJDuPPo/O6dNwuGd0qOebMaJz9JkiSpCdRn6eDFQEeg5+Jlg8sDGyyOXVTI5FSC1tkFTngetvkNtGidxsedA3NmZJeXJEmS1ITqU2jtDAyNMb5ZFYgxvgGcAOxSqMRUwlovCzueCYMfS2PPXQYX94KXb4S4KLvcJEmSpCZQn3e0KoD5NcTnU8/hGioR+Y6D77xWer7CmslEwntPgIlXFj43SZIkqYjUpzAaB1wYQuhaFQghrAacDzxW611q3o4ZBzudA206wievpPE5ORRuvrslSZKkElOfQutEoAPw3xDC+yGE94Cpi2Mn1Xmnmq8WraHfMBg2CTY5OI1fuQO8/XB2eUmSJEmNIO9CK8b4UYxxM2A34AKSARi7xhh7xRg/qvtuNXvtu8Cuf0uvv/sUbjkQ7joOvv8mu7wkSZKkAqr3PloxxkeBR6uuQwirA2fHGI8qRGIqIfm+u1VdnyHJO1uv3grvjytsXpIkSVJGCjm8YgXglwV8npqDHc+Eo8bAij+DWZ+n8dlf1X2f721JkiSpiDklUNlbfQs47mnY8oQ0duX2MOUuiDGztCRJkqT6stBS46laUji8MjmvS6u2sMMZ6fXsr+COI+G2Q+G7zxo3T0mSJKnALLRUnLb+NVS0hLceSCYT5solhZIkSSoCOQ/DCCHctZSPLNfAXKTUtr+FDfaDe4//4b5bM6bDij2yy0uSJEnKQT4drcqlHB8A1xc6QTVjq2wAg8fB9qelsat2gJeu990tSZIkFbWcO1oxxiMbMxE1I/mMg2/RMtno+ImRyfXcmXDfMHjtjsbLT5IkSWog39FSadnxTGjZFqY+mcZy6W757pYkSZKakIWWSkufITDkWei2RRq7/XD47ovscpIkSZKWYKGl0rPi2nBotdks7z8Gl28F7z+eXU6SJElSNTm/oyU1unze3apokZ6v+DP48h24YR/Y8vj8fue8WTCia3J++vSl7/clSZIk5cCOlkrfkQ/C5kcBESZcmnU2kiRJkoWWykCrdrD7+XDADdC22nZuE0fDwgXZ5SVJkqRmy0JL5WP9PWHwo+n12DPhim1g6tP5P8sphZIkSWoA39FS8cvn3a2Oq6XnyywPn78B1+0O6+/VOLlJkiRJNbCjpfJ13NOw+dFAgDfuTeML5maWkiRJkpoHCy2Vr3YrwO7/gGOfgG6bp/Ert4Mpd+W20bEkSZJUDxZaKn9dN4HDqnW0vv0Q7jgSrt4JPp6U37N8d0uSJEk58B0tlaZ83tsCCCE93+Y38NwomDYRrtuj8LlJkiSp2bOjpeZnm9/AsJdgk0OBagXY2LNh9teZpSVJkqTyYaGl5qnjqrD3pXD0I2ls4hVw4cbw9N9h/uz8nueSQkmSJFVjoaXmbeUN0vMu68PcGfDYn2DUVtnlJEmSpJJnoSVVOXoM7HsVLNcdvvssjddnw2NJkiQ1axZaKi9VQzKGVybn+QgVsNEBcOKLMOBPafyWA+GOo2DGJ/nn45JCSZKkZslCS1pSyzbQe3B6HSpgyp1wyRYw8ars8pIkSVLJsNCSlubIB2G1zWHeTBh7VtbZSJIkqQRYaKl5aMiSwlU2gqMfhT0uhGWWT+OPnQ3z59QvH5cUSpIklTULLSkXFRXQ6wg47qk09vwVcOV2MP3lzNKSJElScWqZdQJSSWnXOT1fdiX44i0YPQC2Ojm7nCRJklR07GhJ9XXM49BzH1i0INnkWJIkSVrMQkvNW0Pe3Wq3Aux/Lex3NbRdLo0/cS7Mm12/fHx3S5IkqSxYaEkNteEv4Jhx6fX4i+DSPvDWg9nlJEmSpEz5jpZUCB1WSc87rgaVH8Ktg2DtAdnlJEmSpMzY0ZJq0pAlhcc+CVufAhWt4L2xaXzB3Prn45JCSZKkkmKhJRVa63YwYDgMfRbW2CqNX9Uf3h1b212SJEkqIxZaUmNZaR04+Pb0+pupcNN+cOshUDktu7wkSZLU6Cy0pMYUQnre+1gILeCtB+CKbbPLSZIkSY3OQkvKR0Pe3RowHIY8Dd37wYI5afz1u2HRovrl47tbkiRJRclCS2pKK/eEIx+EPS9OY/eeAFdtD+8/nllakiRJKiwLLamphQAb7Jdet24Pn7wCN+wNtwzKLi9JkiQVjIWWlLWhE6DP0GQc/NQn0/jnb9XveS4nlCRJypyFllQIDXl3a9nOsMu5cOIL0HPfND66P9x+OHz2emFzlSRJUqOz0JKKxQo/hb0u+WHsjXthVD+4c3A2OUmSJKleLLSkYjV4HPTcBwjw9oNpfNZX9XueSwolSZKajIWWVKy6rAv7XwvHPwfr753Gr9wWJt8CMWaWmiRJkupmoSU1poa8u1Wly7qw92Xp9fffwD1DkimF3/y3IGlKkiSpsCy0pFKzw+nQsi385wm4qn/Dn+eSQkmSpIKz0JJKzZYnwtDx8NPtYMGcNP76XbBoUXZ5SZIk6X8stKRS1HktOPxe2OPCNHbviXD51vDumOzykiRJEmChJZWuEGDD/dPrNh3h89fhX0dklpIkSZISFlpSFgoxJGNJxz8HW/8aWi2Txm7cD6Y+Vb8Jhb67JUmSVG8WWlK5WGY5GHAWDJ2Qxj6cANftAdfsAlOfzC43SZKkZqZl1glIqqaq09UQ7buk572OgMk3JwXXh9UKMPfgkiRJalR2tKRy9vMRcPIr0GdoMhK+ynV7wLtjXVIoSZLUSCy0pHLXsSvscm7yDleV6S/BTfvB1QOT/bgkSZJUUC4dlEpBoZcU9j4OXroOpr0Atx6cxl1SKEmSVBB2tKTmaMBZcPKr0Pf4Hy8pfPthCy5JkqQGstCSmqsOK8POI+H4akMypr8EtxwIV2wDb/07v+f57pYkSdL/uHRQKmUFWVK4cnre93iYdB18+hrcdUwaX7SwYb9DkiSpmbGjJSnV/w9wyhTY9lRo0zGN//Pn8P64+j3TTpckSWqGLLQk/VC7FaD/GXDCxDT2+Rtwwz5ww77JuSRJkupkoSWpZm2rdbS2GAwVreD9x2D0wOxykiRJKhEWWlK5qXpva3hlcl4IA/8EJ06EnvsA1SYSPnEuzJlRv2e6pFCSJJUxCy1JuVlhTdj/WvjlA2ls/EVw0aYw8SpYOD+z1CRJkoqNhZak/Ky2WXq+wpow+0t48Ldw1Q7Z5SRJklRkLLSk5qIxlhQe8zjs+jdotyJ8/Z80/tIN8P039XumSwolSVIZsNCSVH8tWkHvY+Ckl6HfyWn84f8Hf/sZ3HYovP1QdvlJkiRlpCgKrRDC8SGEqSGEOSGESSGEber47BEhhFjD0baWz5+2+OcXNN5fIJWwQnS62naE7f9fet1lfVg4D968H+48Oo3P/KT+edrpkiRJJSTzQiuEcCBwAfB/wKbA08BDIYTuddw2A1i1+hFjnFPDs7cAjgVeLXTekuoweCwMeRb6DYP2q6Txy/rBQ7+HmZ9ll5skSVITyLzQAn4NXB1jHB1jfDPG+CvgI2BoHffEGOOn1Y8lPxBCaA/cBBwD1PmySAihTQihY9UBdKj/nyOViYZ2ulbZAHY6B058IY0tnAvPj4ILN4axZxcuV0mSpCKTaaEVQmgN9ALGLPGjMUC/Om5tH0L4IIQwLYTwQAhh0xo+cynw7xjj2BxSOQ2orHZMy+EeSbmoaJGeD7oFum0BC76HiVek8RnTmz4vSZKkRpR1R2tFoAWw5Dqiz4BVfvxxAN4CjgD2BAYBc4BnQwg9qj4QQjiIpIA7Lcc8RgKdqh3dcrxPUj5+uh0c/Sgcciesukkav6wv3HUcfPpa/s/03S1JklSEWmadwGJxietQQyz5YIzPAc/974MhPAu8BAwDTgohrA5cCOxU03tbtTxzLjC32jPzSl5SHkKAHgOge18YuVoSW7QAXr01OX66bbb5SZIkFUDWHa0vgYX8uHvVhR93uWoUY1wEvABUdbR6Lb5/UghhQQhhAbAdSRG2IITQopZHScpFofbjqv5/aBz5EPTcF0IFTH0qjU99EmKN/5+LJElSUcu00IoxzgMmAQOX+NFAYHwuzwhJ+2kToGpu9GPAhotjVceLJIMxNokxLmx45pIKatWNYf9rkv24thicxm8ZBNfvCdMmZZebJElSPRTD0sF/ADeEEF4EJpCMY+8OXA4QQrge+DjGeNri67NIlg6+C3QETiIppk4AiDHOBKZU/wUhhFnAVzHGH8QlFZnlfwID/wQvjE6uW7ROOlyj+8PPdsnvWfNmwYiuyfnp0xvWfZMkScpT5oVWjPG2EEJn4EySPbGmALvGGD9Y/JHuwKJqtywHXEmy3LASeBnYNsY4semylvQjVUsKC2nIM/DshfDKLfDOQ2l8TgOXLUqSJDWyrN/RAiDGeFmM8ScxxjYxxl4xxqeq/Wz7GOMR1a5PiTGusfizXWKMP48xTljK87dfvD+XpFLSqRvsfRkMnfDDjtYV28Hr9/j+liRJKlpFUWhJKmOFGJ7RZV34xdXp9azP4V+/hFsPhhkf5/csx8FLkqQmYKElqfRs9SuoaAVvPwhXbp91NpIkST9ioSUpGw3pdG13Kgx5Grr1/mFX6ot3CpujJElSPVloSSpNXdaDox6Bn49MY1cPhCf+AgvmZZeXJEkSFlqSSllFBfT6ZXq9aD48MQKu3A4+fin35/jeliRJKjALLUnFpSFLCve6DNqtCJ+/Adft0Tj5SZIk5cBCS1L56Lk3nDARNjoQqDb6/dXbYdGiWm+TJEkqNAstSeVl2c6w75Vw4I1p7IFfwej+8EGdW+5JkiQVTMusE5CkRrFW//S8dXuY/jJcszOsm8eSwnmzYETX5Pz06fXfB0ySJDU7drQklYaGvLs15FnodQSECnjr/jQ+++uCpihJklTFQktS+Wu/EuxxIQx5Bn6ydRoftSU8eZ6TBiVJUsFZaElqPlbuCYNuS6/nzoTHz4HLtszvOY6DlyRJS2GhJal5CSE93+syWP6nMPvLNPb63RDjj++TJEnKg4WWpNLWkHe3eu4NJ74AO5+bxu49AUbvCB+ML2yekiSpWbHQktS8tWgFmx2eXrdeFj6eBNfsAncclV1ekiSppFloSVJ1Q8bD5kclEwrfeTiNf/f50u/13S1JkrSYhZak8lTfJYXtV4Ldz4ehE2DtAWn8sr7wyBkw87PC5ypJksqOhZYk1aTLunDA9en1gjkw4RK4cGMYe3Z2eUmSpJJgoSVJuTjoZlhtc1jwPUy8Io3P/mrp97qkUJKkZsdCS5Jyseb2MHgsHHondN0sjY/qB8+cD/O/zyozSZJUhFpmnYAkNamqd7fqI4Tkva3V+8LI1ZLY3JkwdjhMHA3b/a5gaUqSpNJmR0uS8lV90+M9LoSO3WDGNLj/5OxykiRJRcVCS5IaYsP9YdiLMGA4tOmQxm89BD57o+57fXdLkqSyZaElSfUdBV+l1TKw9SkwdHwa+8/jcPlWcN9Jue3BJUmSyoqFliQVSrvO6fk6u0FcBC9dlwzMkCRJzYqFliTVpiGdrv2ugqMeSUbCz5+dxt+4D2Ks+16XFEqSVPIstCSpsXTvm4yE33tUGrtnCNywN3z5bnZ5SZKkRmehJUmNKQRYf6/0ukUb+M8TcNmW8MTIzNKSJEmNy0JLkvLVkCWFxz4OPXaCRfNh/MVpPC5a+r0uKZQkqWRYaElSU1r+J3Dw7XDQzdCpWxq/qj+8cissnJ9ZapIkqXAstCSpqYUA6+4Gxz6Rxr58B+4+Di7eDCZdm1FikiSpUFpmnYAklY2qJYW5atUuPd/+NJh4FXz7ITxyehqf/3399vaSJEmZsqMlScWg3zA4ZQrs+jfouFoav2IbmHwLLKrjHS7f3ZIkqehYaElSsWi1DPQ+BoaOT2Mzpicj4a/YFqY+mV1ukiQpLy4dlKTGlu+Swhat0vMdTofxl8Bnr8Etg/L7vfNmwYiuyfnp012CKElSE7KjJUnFbMsT4aTJ0Pd4qKhWgN17Anw9Nbu8JElSnSy0JKnYLdsZdh4Jxz2Vxl6/Gy7ZAh48FWZ9mV1ukiSpRhZaklQqll8jPf/pdsmmxxOvgFFbZpeTJEmqkYWWJGWl6t2t4ZX5vz816BY4/D7ouukPJw0+PgJmfFL3vU4plCSp0VloSVKpWnM7OOZx2OfKNDbhErhgQ7jnBPji7exykySpmXPqoCQVm3ymFIYA6+0Ody++7tYbpk2EyTcmRz6cUihJUsHY0ZKkcnL4PXD0WFhvTyCk8TsHw1fvZ5aWJEnNjYWWJJWb1beAA2+Aoc+msbcfhEt7w4O/g1lfZZebJEnNhIWWJJWr5X+Snq+1IyxaABOvdEqhJElNwEJLkkpFQ6YUHnhDMqVwlY1g3ndp/NkL4ftvar/PCYWSJNWLhZYkNRdrbgfHPgl7XpzGnvwLnL8hjPkjfPdZdrlJklRmLLQkqdTl0+mqqIAN9kuvV1oX5s2E8RfBpX1y/512uiRJqpOFliQ1Z4PHwqDbYPU+sHBeGn/o91D5cXZ5SZJU4txHS5Kas1AB6+ycHO+Ngxv3SeIvXw+v3gabHZZtfpIklSgLLUkqV/lsfAzQvdrSwdX7wEfPwwuj09h3X8AKbmIsSVIuXDooSfqxQ++Cw+6GrpulsUt7w33D4Iu3a7/Pd7ckSQLsaEmSahICrNUfuvWGkaslsYVz4aXrk2OtHbPNT5KkImdHS5Kam3ymFIaQnh92D6y7OxDg/cfS+NSnGiVNSZJKmYWWJCk3q/eGg26CYZNgs1+m8VsOgtsPh8pptd/rkkJJUjNjoSVJyk/ntWDnkel1qIA37oVLtoBnL8ouL0mSioiFliQpkc+SwuqOHgPd+8H82fDkufn9TjtdkqQyZaElSWqYLuvDkQ/CvlfBsl3S+I37wdSns8tLkqQMWWhJkhouBNjoABhSrbD6cAJctztcuzt8MCG73CRJyoDj3SVJtct30+M2HdLzzX4Jr9wC/306OfIxbxaM6Jqcnz49v6WMkiQVATtakqTGsfNIOOll2GIwtGidxq/fE95+CBYtyi43SZIamR0tSVL+cu10deoGu/0d+hyXTCUEmPZiMhJ+pXWh79DGzVOSpIzY0ZIkNb6Oq6XnW54ArTvAF2/B/Sen8QVzlv4cpxRKkkqEhZYkqWntcAacMgV2PAuWXSmNj9oKJl0HCxdkl5skSQVioSVJanrLLAfb/BpOeD6NzfwE7j8JLuuTbIAsSVIJ8x0tSVLh5DulsGXb9HzA2TD+IvjqPbin2rtbMYehGU4plCQVGTtakqTi0PsYOPmVZGlh9THxV+4Ak66F+d9nlpokSfmy0JIkFY82HWC7U2FotQ2Ov3o3GZpxfk948q/Z5SZJUh4stCRJja9qSeHwytyW9bVbIT0fcDYs1x1mfwXPXpDGv3p/6c9xSqEkKSMWWpKk4tb7GBj2Mux/HXTbPI1fsS386wj49LXMUpMkqTYOw5AkFb8WLaHn3tBjYDr0ggiv350caw/IND1JkpZkR0uSlJ18lxRWN3gsbPALCBXw3tg0/sF4iLHue11SKElqZBZakqTS1GV9+MXVcOKLsMnBafymX8A1u8D745ZecEmS1EgstCRJpa3zWrDr39LrFm3gwwlwwz5w3R7Z5SVJatYstCRJxachSwqPnwB9j082Q57+UhqffBPMm133vS4plCQViIWWJKm8dFgFdh4JJ78KfYak8Qd/B/9YD8b8Eb79MLv8JEnNgoWWJKk8dVgZdjwzvV6uO8z5FsZfBJdtmd+z7HRJkvJkoSVJKh0NWVI45FkYdBus1R+oNiTjtkPhk1cLmqYkSRZakqTmoaIFrLMzHHY3HPdUGn9/HFyxDdxxFHz9n+zykySVFTcsliSVvqpOV646r52e99wn2fR4yp3w+j35/d55s9INlE+fnn+XTZJUtuxoSZKat70uhSHPQI+fQ1yYxh85HSo/zi4vSVJJs9CSJGmVDeGQ25NlhVUmXQsXbQL//i3MmJ5ZapKk0uTSQUlS+cp3SeHqfaqd94WPnoMXroKXrsv9GS4nlCRhR0uSpJoddhf88gFYYytYOC+N//s38NX72eUlSSoJdrQkSc1Prp2un26THO8+Cjf9Iom9cgu8ehusvzdseXzj5ilJKll2tCRJWpo1+qXnaw+AuAhevwtGD8j9GW56LEnNioWWJEn5OOD6ZEphz32BkMav3xPeejApwiRJzZ6FliRJ+VplQ9j/mh9ufDztRbh1EFy5fWZpSZKKh4WWJElVqt7dGl6Z27TAzmul51ueCG06wVfvpbGJV8H8OXU/wyWFklSWLLQkSSqEHU6HU6bAjmemsbFnwUWbwgujfzi5UJJU9iy0JEkqlLYdoc+Q9LpjV5g5PRkJf/nW2eUlSWpyFlqSJC1NvksKqwx5FnY5D9qvApXT0viL18Dc7wqfpySpaFhoSZLUWFq2gT7HwsmTYcez0viYM+Af68MjZ8A3H9R8r+9uSVJJs9CSJKmxtVoG+hyXXq+wJsythAmXwKhqe3TF2PS5SZIahYWWJEn1Vd8lhcc9BQf/C9bqD1Qrrm7YC94fV3fBZadLkkpCy6wTkCSp2QkV8LOdkmP6ZLhyuyQ+7UW4YR9YvQ9s/atsc5QkNYiFliRJhVTV5crVij3S8y2OgZdvgI+eh1sGpfFclhTOmwUjuibnp0/Pr8MmSSo4lw5KklQsBp4NJ78CfY+Hlm3T+DU7w5Q7YdHC7HKTJOXFQkuSpGLSYRXYeSQcPyGNffoa3HEUXNwLXro+v+f5TpckZcJCS5KkppDv4Iz2K6fn2/wGllkBvpkKD/8+jX/3eeHzlCQVhIWWJEnFbpvfwClTYJe/QqduafySzeG2wxZPKlyUXX6SpB9xGIYkSaWg9bLJXlwbHQh/WSOJLVoAb96XHMt1z+95Ds+QpEZlR0uSpCzlu6SwRav0fPBj0PtYaNMJvv0wjd92WDI8Y/73hc9XkpQTO1qSJJWqLuvBrufBgLPh1dvggcV7b73/WHK06Qjr7Z5tjpLUTNnRkiSpGOXT6WrdDjY6IL3e6lfQaXWYOwMm35zGJ1wC331R97OcUihJBWGhJUlSudnuVDj5VTji37DxQWn88RHwj/XgX0fCB+Ozy0+SmgELLUmSylFFBfxka9jtH2ms66awaD68fhfc9Is0Pve7ps9Pksqc72hJklRKqpYU1scR/4av3oMXr4HXbk+XBl6yOfQ6AvoMgWWWq/lepxRKUl7saEmS1JysujHscQEMezmNzZ0B4y+CCzeCe0/MLjdJKiMWWpIklYN8x8S3aZ+e738t/GSbZF+u1+9K41OfhhgLnqokNQcWWpIkNXc9doIjHoBjn4Ce+6TxWw6E0QPgrQchLqr5XqcUSlKNLLQkSVKi66aw16Xpdcu28PGLcOugpOCSJOXMQkuSpHKW75LC6o5/HrY+BVp3gC/eSuOv3gYL59d9r50uSc2chZYkSapZ+5VgwHA4ZQpse2oaf+AUuLgXTLoOFs7LKjtJKmoWWpIkNUf5dLqWWQ62/lV63a4zfPsB3H8SjNqqcfOUpBJloSVJkvJz/PPw8xHQfmWY8XEaHzscvni77ntdUiipmXDDYkmSlMplQ+TW7WDLE2Dzo2DiVfDoH5P4xCuTo3s/2OTgxs9VkoqYHS1JklQ/rZaBLY5Or3vsBKECPhwP91Xb+Pj7b5s+N0nKmIWWJEkqjP2vhVNehx3+AB1XS+OX9YHHR9ZecLmcUFIZcumgJElaulyWFAJ07Arb/Q76HAfnrp7E5s6EJ8+F50ZB72MaN09JKhJ2tCRJUuFVtEjP97kSVloP5lbC039L4y4plFTGLLQkSVLjWm93GDoefvFP6NwjjV/WBx77M8z+uub7XFIoqYQVRaEVQjg+hDA1hDAnhDAphLBNHZ89IoQQazjaVvvMaSGEF0IIM0MIn4cQ7gkhrNM0f40kSc1IrvtxVVTABvvBMePS2NyZSYfr0t6Nn6ckNbHMC60QwoHABcD/AZsCTwMPhRC613HbDGDV6keMcU61n28HXAr0BQaSvIs2JoSwlB0ZJUlSo6q+pHC/q2GVjWD+7DT2xEiYs5R3wex0SSoBmRdawK+Bq2OMo2OMb8YYfwV8BAyt454YY/y0+rHED3eOMV4bY3w9xvgKcCTQHejVaH+FJEnKzzq7wHFPwf7XpbHxF8OFmySDMxbMzS43SWqgTKcOhhBakxQ/5y7xozFAvzpubR9C+ABoAUwG/hhjfLmOz3da/G+Ni8BDCG2ANtVCHerKW5IkLUWuUwpDgB4DLe2HnQAAIABJREFU0+vOPeCrd+Hh38NzlzVefpLUyLLuaK1IUix9tkT8M2CVWu55CzgC2BMYBMwBng0h9KjpwyGEAPwDeCbGOKWWZ54GVFY7puX+J0iSpII55jHY40JovzJ8+2Eaf+NeWDi/7ntdUiipiGRdaFWJS1yHGmLJB2N8LsZ4Y4zxlRjj08ABwDvAsFqefQmwEUlRVpuRJF2vqqNbHrlLkqRCqWgJvY6Ak16GbX+Xxu8ZChdsCE+eB7O+zCw9ScpV1hsWfwks5Mfdqy78uMtVoxjjohDCC8CPOlohhItJOl/bxhhr7VLFGOcCc6vdl8uvliRJ+cp1SWHrZWHrU+Cp85LrZVeCmZ/A4+fAU3/N73fOmwUjuibnp0+vezqiJBVIph2tGOM8YBLJZMDqBgLjc3nG4qWBmwCfVI+FEC4B9gX6xxinFiZjSZKUiRMmJhsfr9YLFs5L43ceA1+9n11eklSLrDtakLw/dUMI4UVgAnAsyYTAywFCCNcDH8cYT1t8fRbwHPAu0BE4iaTQOqHaMy8FDgb2AmaGEKo6ZpUxxu8b/S+SJEm5y6XL1bINbHxgckx9Gq7bPYm//W94dwxsMRi2PKHuZ0hSE8q80Iox3hZC6AycSbIn1hRg1xjjB4s/0h1YVO2W5YArSZYbVgIvkywNnFjtM1Wj4Z9Y4tcdCVxbyPwlSVITW22z9Hyt/vD+OHh+FEy+Kb/nuKRQUiPKvNACiDFeBtQ4wzXGuP0S16cApyzleb5kJUlSc3DgjfDR8zDmj/BZteHCz14Emx8FHVbOLjdJzVqxTB2UJEmqn7X6Jxsf7/aPNPbkuXD++nDbYTD1yexyk9RsWWhJkqTiVPXu1vDKpS/rq2gBGx+UXq/WCxYtgDfvg1uq7fAyb/bSf6/7cUkqAAstSZJUfn55PwwdD72PhTYd0/hlfeG5UTB/Tna5SWoWLLQkSVJ5Wrkn7HoenPRSGpv9JTz8e7h4M3j5xuxyk1T2imIYhiRJUs5y3fS4Sqt26fku58GzF8CMj+GhU9P4/O+XvjzRKYWS8mBHS5IkNR+bHgLDXoKdz4V2K6bxi3vBw6fBF29nl5uksmKhJUmSmpdWbaHvUDj+uTQ251t47jK4tDfcsG92uUkqGxZakiSpPOQzpRCgdbUlhQfeCOvsBqECPqpWgD1zAcz+uu7nOKVQUg0stCRJktbqD4NuhlNeh21+m8af+iuc3xMe/B1880F2+UkqORZakiRJVTp2hW1+nV6v3BPmz4aJV8LlW2WXl6SSY6ElSZLKW75LCqs7agwcfi+sPQDiojR+8wHw/uMQY+33uqRQatYc7y5JklSbEGDN7ZNj2oswesck/t9nkqPrptD3+Ozyk1S07GhJkiTlost66fnmR0HLZWD6y3DXMWl8wZymz0tSUbLQkiRJzVNDlhTudA6cMgW2/R207ZTGL9kCHh8B331e+70uKZSaBQstSZKk+lh2Rej/BzjhhTQ2+yt48i/JpMIHTskuN0mZs9CSJEmqLt9OV5v26fnel0O3LWDhPHj1tjQ+7YUf37ckO11SWbHQkiRJKpT194TBY+HoR2HdPdL49XvBdXvCf5/NLjdJTcqpg5IkSbmo6nTlYvXesO8VMOL+5LqiJUx9Mjm6b9l4OUoqGna0JEmSGtuQZ5NJhRWt4MMJaXz8xfDth7Xf53JCqWTZ0ZIkSWqIXDpdy60Ou58P2/wWnv4bvPjPJP7EyOTo3g967t34uUpqMna0JEmSmkqn1ZLR8FXW2AoI8OF4eOjUND7z0yZPTVJhWWhJkiRl5ZB/JftxDTgbuqyfxkf1g0fPhO+/yS43SQ0SYoxZ51B0QggdgcrKyko6duyYdTqSJKmczJsFI7om56dPT0fIV49XadMR5s6o+7PV45IKbsaMGXTq1AmgU4xxRq732dGSJEkqNvtfB116pkUWwKTrYOH87HKSlBcLLUmSpGLTYyAMeQb2vCSNPXIaXNYX3rgPaluR5JRCqWg4dVCSJKkp5bofV0UFbLAv3Hdict2uM3z1Htx+GKzWq3FzlNRgdrQkSZJKwdDxsO2p0KodfDwpjX/0fO0drip2uqQmZ6ElSZJUCtp0gP5nwEkvw6aHpfEb9kmmFE68CubOzC4/ST9goSVJklQMqpYUDq+se4pgh1Vgl7+k1y3bwudvwIO/hYs3a/w8JeXEQkuSJKmUDXsJdj4XVvzZD5cFXrsbTLq27i6XSwqlRuMwDEmSpGKVy+CMZZaDvkOhzxB491G4ef8kPv3l5Hj4dFh/j8bPVdIP2NGSJEkqByHAT7ZKr/v/ETr3gPmz4JVb0/gLo+H7b+t+lp0uqcEstCRJkspR36Fw4gtw5MOw4QFp/NEz4e/rwj0nwMcvZZefVOZcOihJklRqct2LKwRYY0tYdSN47fYkttK68MVbMPnG5KiyYE7dQzgk5cWOliRJUnMy+DE4agxsdBC0aJPGL+0Dz5wPc+oo4FxSKOXMQkuSJKk5CQG694F9r4Bh1TY+nvUFjB0O528AT4zMLD2pXFhoSZIklYtc9+Kq0m6F9HyPC2HFdWDuDBh/cRr//I3C5yk1AxZakiRJgg33h+OfgwNvgq6bpvHRA2D0QJh8M8z/vuZ7XVIo/YjDMCRJkspdrsMzKipgvd1hze1h5GqLYy1h2sTkaLtcY2YplRU7WpIkSfqhENLzE19M9uTq1B3mVNt/69ZD4N2xsGhR0+cnlQA7WpIkSc1VLp2u9l1g29/C1qfA2w/CbYcm8f88nhyde8DmR9Z877xZMKJrcn76dMfHq1mxoyVJkqSlq2gBa/VPr7c4Blp3gK/ehUdOT+MzPm763KQiZKElSZKk/A08G37zJuzyV1j+p2n80r5wx1Hw8aTa73V4hpoBlw5KkiTph3IdntGmA/Q5DjY5GEZ2S2JxIUy5Mzm69W7cPKUiZkdLkiRJDROq/Sfl0WNg40FQ0SqZVFhl3J/h0ylNn5uUEQstSZIkFc7KG8A+l8OvXoN+J6Xx50bB5VvBZf1gwiU13+uSQpURCy1JkiTlpmpJ4fDKpU8Q7LgqbP/79HqdXaFFa/j8dXh8RBp/f5wj4lWWfEdLkiRJjW+/0bBwHrxxH7xyC3w4IYnfdih0Xht6Hwc99842R6mAQowx6xyKTgihI1BZWVlJx44ds05HkiSpNNW2j1b1eJsOMHfmj89r+7z7camJzZgxg06dOgF0ijHOyPU+lw5KkiQpOydOgl3OgxXWSossgH8dAf95AmwKqES5dFCSJEmNI5cx8W3aQ59jYYvB8Pa/k6WEAO+OSY6V1oVeR9R8r50uFTE7WpIkScpeRQWs1T+97nUEtG4PX7wFD1cbqvH+OFgwt8nTk/JlR0uSJElNK5dO189HwMA/weSb4fnL4Zv/JvHbDoU2HaHHTsmxJLtcKhJ2tCRJklSc2naCvkNhyDNprP3KMHcGTLkD7j42jb/zMCyY1/Q5SrWwoyVJkqTiUFunK1TrDQybBJ+/CW/el4yK//aDJH7HUbDM8rDu7jU/206XmpgdLUmSJJWOUAGr94adzoGh49P4sl3g+2/g5RvS2Niz4cPn3BBZmbCjJUmSpNIUQno+bBJ8PCl5p+u125PYxCuSo/3K0OPnNT/DTpcaiR0tSZIkFbeqJYXDK2svhCpawFo7wB4XpLGe+yaDM777DF6+Po0/cgZ8OqVxc1azZ0dLkiRJpWlp0wv3ugQqWsHUp+D1u2DyTUl80jXJsVov2PigpslVzY4dLUmSJJWvlq2hxwDY9bw0ts5uUNEyWWr44O/S+GfVulzzZsHwTskxb1bT5auyYUdLkiRJ5SOXPbr2uyopnibfDC9dB1//J4lfvROs3ge2GAxrD2j8XFXWLLQkSZLU/LTvAlv/KimqRq6WxCpawkfPJ0e7FWu+z+EZypFLByVJklT+ahuoUX1y4Ykvwg5nQIeuMPvLNH73cTBtUtPlqrJgoSVJkiRB0uXa7lT41Wuw7+g0/ub9MLo//HNnePuhmu/1nS4twUJLkiRJqq5FS1h31/R6wwOS6YUfToA7j07j33/b9LmpZFhoSZIkqfnKZY+uPS5Iulxb/xraLpfGL9oU7jga/vMExEVNkq5Kh8MwJEmSpKXpuCoMOAv6DoW/9UhiC+fClDuSo9PqNd/n8Ixmy46WJEmStKTaOl3Vz494EDY/Ctp0hMqP0vjth8PbD8OihU2Xr4qOHS1JkiSpPrpuAj/ZCnb6v6Srdd+wJP7e2OTo2A02Pqjme+10lT07WpIkSVJDtG4HG+yXXvc+DpZZHmZMg6f/lsbffggWzKv7WU4vLBt2tCRJkqRcVS0prMuAs2Dgn+DN++CF0ckGyJBMLGzXOZliuME+jZ+rMmVHS5IkSSq0Vm1howPgsLvT2LJdYPZX8PwouHqnND77q6bPT43OQkuSJElqCsNehEPugJ77QIvWafyizeD2XybvdTlAo2y4dFCSJElqqFyWFFa0hB4Dk6NyGpzfM4kvmg9v3JMcHbvWfK/DM0qOHS1JkiSpqS2zfHp+9BjofWyyGfKM6Wn8rmPhgwkQY9PnpwazoyVJkiQ1llw6XStvAKv3gYF/TsbE33tCEn/rgeRYdZNkvy6VFDtakiRJUjFo1TZ5f6vKxoOgRRv4ZDLcf1Ia//6b9Nxx8EXLQkuSJElqalWdruGVtb9vtdvf4ddvQv8/QvtV0vglW8BDv4dvP2yaXFUvFlqSJElSsVq2M2z7Wzjh+TQ2f3YyIv7CTdJlhkuy05U5Cy1JkiSp2LVolZ4fdDOsuT3EhfB6tX263nnE8fBFxGEYkiRJUrHIZXjGmtvDurvB9MnwzD/gjXuT+B1HwnJrJBMMN9i3sTPVUtjRkiRJkkpR101g71Hpddvl4NsPYMwZcHGvH3/e5YRNykJLkiRJKna5DM8Y9iLscSGstF7yHleVa3aFF/8Jc2c2Ta4CLLQkSZKk8tCqHfQ6Ao6fAAffnsY/mQwPnAIXbpzG3AS50VloSZIkSaWqpk5XCPCTrdPP7HgmrLgOLJiTxm7YBz6amJy7pLBRWGhJkiRJ5azPkGQ8/OH3pbFpE+HqgXDbofDVezXfZwHWIBZakiRJUrkLAbptnl5vPAhCBbx5P1y5Q3Z5lTELLUmSJKncLG14xm5/h6HjYZ1dk/24qjz4W/j4pbqfbacrJ+6jJUmSJDVHXdaDQbfAe+Pgxn2S2OSbk2PVjWGTQ7LNr8RZaEmSJEnNQW2bIXfvk5733Afe+jd88kpyVJk+GdbolyxBVE5cOihJkiQpsdel8Ou3YKdzYIU10/i1u8KoreC5UTD765rvdUnhD1hoSZIkSUot2xn6DYPjnk5jLdrA56/Dw7+HizdL43FR0+dXIiy0JEmSpOastsEZ1ZcJnvQy7HIerLIhLJyXxq/YDiZeBXNn1v78ZtrpstCSJEmSVLdlloM+x8KQZ+CoR9L41+8nkwr/sT48elZ2+RUhCy1JkiRJuVtlw/R8p3Og89owdwa8cFUan3wTzPys7ueUeafLqYOSJEmS6mfzo6DvCfD+OHju0uRfgAd/lxyrbQ5rD8g2x4zY0ZIkSZL0Y0vb9LhKRQX0GAAH3pjGVt0k+ffjF+HJc9N4XVMLq5RJp8uOliRJkqTCOvJBmDMD3nkY3noA3hubxMf9GZ78a7Jf1yYHZ5tjI7PQkiRJkpS72jY+XlLHVWHzI2GjA2BE1yS2yobw6Wvw6q3JUWXBnLq7ZiXIpYOSJEmSmsaRD8PgcbDJIdCybRq/pDc8ed7SlxWWEAstSZIkSU0jBOjWC/a+DIZNSuOzv4THz4Hze8KYP2SXXwFZaEmSJElquFyHZ1RZZvn0fK9LYZWNYP5sePGfafy7zwufZxOx0JIkSZKUrZ77wHFPweH3wprbp/E2HbLKqMEchiFJkiSp8eQ6PCOEpMjqtkU6PKPVMo2ZWaOyoyVJkiRJBWZHS5IkSVLTy7XTVaLsaEmSJElSgVloSZIkSVKBuXRQkiRJUvEokyWFdrQkSZIkqcAstCRJkiSpwCy0JEmSJKnALLQkSZIkqcAstCRJkiSpwCy0JEmSJKnALLQkSZIkqcAstCRJkiSpwCy0JEmSJKnALLQkSZIkqcAstCRJkiSpwCy0JEmSJKnAiqLQCiEcH0KYGkKYE0KYFELYpo7PHhFCiDUcbev7TEmSJEkqpMwLrRDCgcAFwP8BmwJPAw+FELrXcdsMYNXqR4xxTgOfKUmSJEkFkXmhBfwauDrGODrG+GaM8VfAR8DQOu6JMcZPqx8FeKYkSZIkFUSmhVYIoTXQCxizxI/GAP3quLV9COGDEMK0EMIDIYRNG/LMEEKbEELHqgPokO/fIkmSJElVsu5orQi0AD5bIv4ZsEot97wFHAHsCQwC5gDPhhB6NOCZpwGV1Y5pOf8FkiRJkrSErAutKnGJ61BDLPlgjM/FGG+MMb4SY3waOAB4BxhW32cCI4FO1Y5ueeQuSZIkST/QMuPf/yWwkB93mrrw445UjWKMi0IILwBVHa28nxljnAvMrboOIeTyqyVJkiSpRpl2tGKM84BJwMAlfjQQGJ/LM0JSFW0CfFKoZ0qSJElSQ2Td0QL4B3BDCOFFYAJwLNAduBwghHA98HGM8bTF12cBzwHvAh2Bk0gKrRNyfaYkSZIkNabMC60Y420hhM7AmSR7Yk0Bdo0xfrD4I92BRdVuWQ64kmRpYCXwMrBtjHFiHs+UJEmSpEYTYqxtPkTztXjEe2VlZSUdO3bMOh1JkiRJGZkxYwadOnUC6BRjnJHrfcUydVCSJEmSyoaFliRJkiQVmIWWJEmSJBWYhZYkSZIkFZiFliRJkiQVmIWWJEmSJBWYhZYkSZIkFZiFliRJkiQVmIWWJEmSJBWYhZYkSZIkFVjLrBMoZjNmzMg6BUmSJEkZqm9NEGKMBU6l9IUQVgOmZZ2HJEmSpKLRLcb4ca4fttCqQQghAF2BmVnnAnQgKfq6URz5qHD8bsuT32v58rstT36v5cnvtXxl9d12AKbHPIonlw7WYPH/gDlXq40pqfkAmBljdC1jGfG7LU9+r+XL77Y8+b2WJ7/X8pXhd5v373IYhiRJkiQVmIWWJEmSJBWYhVbxmwucvfhflRe/2/Lk91q+/G7Lk99refJ7LV8l8906DEOSJEmSCsyOliRJkiQVmIWWJEmSJBWYhZYkSZIkFZiFliRJkiQVmIVWRkII24YQ7g8hTA8hxBDC3kv8PIQQhi/++fchhCdCCD2X+MzyIYQbQgiVi48bQgjLNe1fourq+l5D+P/t3XuwndMZx/HvTyRuIW3cgjYYJBSVCnWpS9xbbV1LTWtK+4/WGEXdKxpNp63GrUSnqMqgijF1byVuZeI2yiAkRDsOk3ISEhIJkYunf6y16/U6Z++d2jn73c3vM7Nmn3et593v+85z3rP32mvtddRf0vmSpkhakGOulbRh6Tmc1wpqdM+WYq/IMSeV6p3bimkmr5K2knRHztm7kh6XNLTQvoqkyyS9le/tOyR9rm+vxIqaeI0dKGm8pBn5NXaapB+VYpzXipF0lqQn8304S9JtkoaXYhrmTdLQ/PuxIMddKmlA316NFTXKraTBOa8vSXpP0ms5b4NKz1Op3Lqj1T5rAM8CJ/TSfjpwSm7fEegG7pW0ZiHmBmAE8NVcRgDXLa8TtqbUy+vqwPbA2Px4GDAMuKMU57xWU6N7FoD8hm4n4PUemp3b6qmbV0mbAZOBF4FRwHake3hhIewS4FDgKGA3YCBwl6R+y+2srZFG9+vFpHvwaGCrvH2ZpIMLMc5r9ewJXA7sDOwHrAxMkrRGIaZu3vLj3aTfkd1y3OHAhX10DdazRrndMJdTgW2BY0n38NW1J6hkbiPCpc0FCOCQwraAN4AzCnWrAO8Ax+XtrfJ+OxVids51w9t9TS6fzGsvMTvmuKHOa+eU3nILbATMALYGuoCTCm3ObcVLT3kFbgSuq7PPIGAR8O1C3YbAUuCAdl+TS695fR4YXap7ChjrvHZOAdbN+d2j2bwBX8vbGxZijiJ9eLJWu6/Jpefc9hJzBOl/aa1c1dx6RKuaNgWGAJNqFRHxAfAQsGuu2gWYGxFPFGIeB+YWYqz6BpH+kLyTt53XDiVpJdLo1LiIeKGHEOe2w+Scfh2YLmlins7yRGka2kigPx//e/066Y2881pdk4GDJG2kZC/SDIOJud157Qy1aWNz8mMzedsFeD7X10wkfaA9crmerS2Lcm57i5kXEUvyduVy645WNQ3JjzNL9TMLbUOAWT3sO6sQYxUmaVXg18ANETEvVzuvnesMYAlwaS/tzm3nWY807ehM4B5gf+BW4C+S9swxQ4BFEfF2ad/i32urnhOBqaQR6EWk/B4fEZNzu/NacZIEXARMjojnc3UzeRtC6f1Vjl+Ec1sJveS2HLM2MBq4olBdudyu3I6DWtOitK1SXbm9pxirIEn9SVOSVgKOLzU7rx1G0kjgx8D2kecq9MK57Sy1DyNvj4iL88/PSNoV+CFplkFvnNdqO5E0dfcg4FVgD+B3kt6IiPvq7Oe8Vsd44Iuk7+I04vdPnaVubiWtRfou1lTgvFJzpXLrEa1q6s6P5d73enzUU+8G1u9h33X55EiYVUjuZN1MmiK6X2E0C5zXTrU76f58TdISSUuAjYELJXXlGOe287xFGqWcWqqfBtRWHewGBkj6bCmm+PfaKkTSasAvgVMi4s6IeC4ixgM3kb5oD85rpUm6jNRJ3isiZhSamslbN6X3Vzm+P85t29XJba19TdII9Hzg0IhYXGiuXG7d0aqmV0i/LPvVKvLSlHsCj+aqx4BBkr5ciNmJNF/1UaySCp2sLYB9I2J2KcR57UzXkT59G1EorwPjgANyjHPbYSJiEfAkMLzUNIw0CgJpAYXFfPzv9QbANjivVdU/lw9L9Uv56H2R81pB+ft040mr9u4dEa+UQprJ22PANrm+Zn/SogpPLa9zt/qayG1tJGsSaSrgQRGxsBRSudx66mCbSBoIbF6o2lTSCGBORLwm6RLgbEkvAy8DZwPvkZaHJiKmSboHuErScfk5rgTuioiX+uxC7GPq5ZX0xvsW0tLu3wD6Sap98jInIhY5r9XV6J4FZpfiFwPdtbw5t9XURF7HATdJehh4kLSc8DdJS70TEXMlXU0avZxNutcvAKYA9aag2XLUxGvsQ8A4Se+TOs17At8j/VsV57W6Lge+AxwMvFt4DZ0bEe83mbdJpFHq6ySdBgzOMVeVZphY36qb2zySNYn0r3KOBtbKHS+ANyNiKVXMbTuXblyRC+lFOnooE3K7gDGkZd4Xkr4LsE3pOQYD1wPzcrke+Ey7r21FLvXyCmzSS1sAo5zXapdG92wP8V0Ulnd3bqtZmskr8APSB17vA88AB5eeY1XgMlJn+z3gTuDz7b62Fbk08Ro7BLgG+HfO64ukTpac1+qWOq+hxy5L3khTf+/K7bNz/Crtvr4VuTTKbZ17OoBNqppb5ZMyMzMzMzOzFvF3tMzMzMzMzFrMHS0zMzMzM7MWc0fLzMzMzMysxdzRMjMzMzMzazF3tMzMzMzMzFrMHS0zMzMzM7MWc0fLzMzMzMysxdzRMjMzMzMzazF3tMzMbIUmqUvSSe0+DzMz+//ijpaZma0QJB0r6Z0emnYEruyD47tDZ2a2Alm53SdgZmbWThHxZrvPYVlIGhARi9p9HmZmVp9HtMzMrE9J+rukSyX9RtIcSd2SxjS57yBJV0qaJWmepAckbVdo307Sg5Leze1PSdpB0ijgGmCQpMhlTN7nYyNNue04SXdJek/SNEm7SNo8n/sCSY9J2qywz2aSbpc0U9J8SU9K2rd4zcDGwMW14xfaDpf0gqQP8rn8pHTNXZLOkTRB0lzgKkkDJI2X9IakhTnmrGVKhJmZLVfuaJmZWTscAywAdgJOB86VtF+9HSQJuBsYAhwIjASeBu6XNDiH/QmYQZoOOBL4NbAYeBQ4CZgHbJDLBXUONxq4FhgBvAjcAFwB/ArYIceML8QPBP4K7At8CZgI3ClpaG4/LJ/XuYXjI2kkcDNwI7AtMAYYK+nY0vmcBjyfr2kscCJwEHAkMBw4Guiqcz1mZtbHPHXQzMza4bmIOC///LKkE4B9gHvr7LMXqTOyXkR8kOtOlXQI8C3S96yGAuMi4sXac9d2zqNBERHdTZzfNRFxc97vfOAxYGxETMx1vyWNkEF60meBZwv7nyPpUFJnaHxEzJG0FHi3dPxTgPsjYmzeni7pC6SO1YRC3AMR8d+OYe7AvQxMjogAXm3imszMrA95RMvMzNrhudL2G8B6DfYZSRo5mp2n582XNB/YFKhN47sI+IOk+ySdWZze9ynOb2Z+nFKqW1XSWgCS1shTIadKeief15akjl89WwGPlOoeAbaQ1K9Q949SzATSaNtLeRrm/g2vyMzM+pQ7WmZm1g6LS9tB49eklUgdshGlMhwYBxARY4CtSVMM9wam5pGlT3N+Uaeuds7jgMOBnwK75/OaAgxocBwVnqtYV7aguBERT5M6mKOB1YCbJd3S4FhmZtaHPHXQzMw6xdOk72ctiYiu3oIiYjownbTwxJ+B7wO3AouAfr3t9yntDkyIiFsBJA0ENinF9HT8qcBupbpdgekRsbTeASNiHnATcFPuZN0jaXBEzPnfLsHMzFrJI1pmZtYp7iN9V+o2SQdI2kTSrpJ+kVcWXC2vxDdK0saSvkJaFGNa3r8LGChpH0nrSFq9hef2T+AwSSPyKog38MnX2C5gD0kbSVon110I7CNptKRhko4BTqD+Qh1IOlnSUZK2lDQMOALoBnr6P2FmZtYG7miZmVlHyIs+HAg8DPyRNGp1I2nkaCawFFibtFrgdNJqfn8Dfpb3fxT4PWkU6E3SaoetcjLwNml1wztJqw4+XYo5N5/rv/Lxa1MAjwSOIq0q+HPg3IiY0OB484EzSN/dejI/74GU8C5cAAAAoElEQVQR8eGnvhIzM2sJpdctMzMzMzMzaxWPaJmZmZmZmbWYO1pmZlYJkr5bXLa9VF5o9/mZmZktC08dNDOzSpC0JrB+L82LI8L/lNfMzDqGO1pmZmZmZmYt5qmDZmZmZmZmLeaOlpmZmZmZWYu5o2VmZmZmZtZi7miZmZmZmZm1mDtaZmZmZmZmLeaOlpmZmZmZWYu5o2VmZmZmZtZi/wED78LI1ESb5QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1388afdacf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
